perm filename HAL.PL[HAL,HE] blob sn#119944 filedate 1974-09-22 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00008 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	TYPES
C00003 00003	$ EXEC_FILES
C00004 00004	$ DELIMITERS
C00005 00005	$  RESERVED_WORDS
C00007 00006	$ NON_TERMINAL_SYMBOLS
C00008 00007	$ CLASSES
C00010 00008	$ PRODUCTIONS 
C00034 ENDMK
C⊗;
TYPES

{Algol types}
TLABEL TPROCEDURE TINTEGER TSTRING


{Hal types}
TFRAME TPLANE TVECTOR TTRANS TSCALAR
$ EXEC_FILES

HALEX
$ DELIMITERS


"=>" # & ⊗ | 
$  RESERVED_WORDS

{Algol}
RETURN ELSE WHILE DO THEN STEP LOAD_MODULE  UNTIL
BEGIN IF GOTO  PROCEDURE ARRAY SCALAR END FOR ABS
DIV MOD BOOLEAN
TRUE FALSE
INTEGER

comment Here are the HAL unique reserved words;


STOP DONE MOVE GO TO TRACING MAINTAINING ORIENTATION FROM VIA 
USING DURING MEANWHILE YELLOW BLUE APPROACH DEPARTURE DEPROACH
FORCE FREE MASS LOCATION BY TOLERANCE SEARCH ACROSS NORMAL_TO
INCREMENT REPEATING ON CENTER DRIVE ASSERT AT
STRING DEF_WRT FIX_WRT FIXDEF_WRT
UNITS CM INCHES JIFFIES SECONDS MILLISECONDS KG GM LBS OZ RADIANS
DEGREES BOLLES EULER  ATTACH LOC ORIENT WITHIN DURATION
FRAME PLANE VECTOR TRANS COFFEE_POT
$ NON_TERMINAL_SYMBOLS

BLAT STBLAT
$ CLASSES

@ARM	YELLOW BLUE
@ALGLTP	LABEL PROCEDURE STRING INTEGER
@HALTP  SCALAR FRAME TRANS VECTOR PLANE
@ANYTP  ALGLTP HALTP 
@WRT	FIXDEF_WRT DEF_WRT FIX_WRT  comment  With-respect-to operators;
@UNOPE	NOT ABS + -  ¬ { Unary operators}
@RL	< > = ≠ ≤ ≥ 	comment Relations;
@DCLW  	ANYTP UNITS WRT
@REQ	SOURCE_FILE LOAD_MODULE
@CFRAME	ARM TFRAME 
@WRTTP	VECTOR FRAME PLANE
@ALGVAR	TINTVAR TSTRINGVAR TREALVAR
@HALVA 	TFRAME TPLANE TVECTOR TTRANS
@DECLVA ALGVAR HALVA
@VAR	DECLVA TSANSTYPE
@GEEQ	≤ ≥
@S01	↓
@S02	/ *
@S03	+ -
@SL1	↓ * / + -
@SL2	* / + -
@SL3	+ -
@F01	↓
@F02	* /
@F03	+ -
@FL1	↓ * / + -
@FL2	* / + -
@FL3	+ -
$ PRODUCTIONS 

 →; 		 		INITIALIZE	SCAN      ↓BLOCK  ≡FIN


BLOCK:BEGIN	→ ;		ENTERBLOCK      SCAN             ¬ERR1
TSTRING    →;			NAMEBLOCK       SCAN		 ≡GOSTAT
GOSTAT:ANY	→ SAME;	 	                                  ↓STMT  ≡NEXTSTMT
NEXTSTMT: ; → ;				        SCAN      	 ≡FINSTAT
END	→;			EXITBLOCK	SCAN      ↑      ¬ERR0
FINSTAT:;→;					SCAN		 ≡FINSTAT
END	→;			EXITBLOCK	SCAN      ↑      ¬GOSTAT


STMT:; →SAME;					          ↑
FOR → ;				BEGFOR   	SCAN 2	  ↓FORST  ≡ENDST
ANYTP → SAME;					SCAN      ↓DCL    ≡ENDST
MOVE → ;			BEGMOVE   	SCAN      ↓MOVST  ≡ENDST
SEARCH →;			BEGSEARCH    	SCAN	  ↓SEARCHST ≡ENDST
BEGIN → SAME;						  ↓BLOCK  ≡ENDST
DECLVA → SAME			BEGASS		SCAN	  ↓ASSGNT ≡ENDST
ANY →; 				ERR  		SCAN              ≡STMT
ENDST:ANY → SAME;                                         ↑


DCL:ANY VAR  → SAME SAME;	STORVAR 	SCAN                 ¬ERR2
ANY ANY , → SAME;               		SCAN	          ≡DCL
ANY → SAME;						  ↑

FORST:VAR ← → SAME;		PUTIND		SCAN	  ↓EXPR		¬ERR3
STEP→;				PUTINIT		SCAN	  ↓EXPR         ¬ERR4
UNTIL→; 			PUTSTEP		SCAN      ↓EXPR		¬ERR5
DO→;			PUTFINAL PUSHSTAT    	SCAN	  ↓STMT		¬ERR6
 →;			POPSTAT PUTBODY	                  ↑

ASSGNT: ANY ← →;                LEFTPART	SCAN	  ↓EXPR		¬ERR8
ANY → SAME;			RIGHTPART		  ↑


EXPR:TINTVAR →;			PUTEXPR		SCAN      ↑
TINTEGER →; 			PUTEXPR         SCAN      ↑		¬ERR7



ERR0: ANY →;			ERR				≡finstat
ERR1: ANY →;			ERR   			↑
ERR2: ANY →;			ERR   			↑
ERR3: ANY →;			ERR   			↑
ERR4: ANY →;			ERR   			↑
ERR5:ANY →;			ERR  			↑
ERR6:ANY →;			ERR  			↑
ERR7:ANY →;			ERR  			↑
ERR8:ANY →;			ERR  			↑
FIN: →;